<?php
/**
 * Product
 *
 * Обработка данных товаров
 *
 * @author Mike
 */
class Product extends ActiveRecord  {
	protected $tableName = 'product';
	public $pkName = 'ID_product';
	
	public static $idEssenceType = 1;
	
	protected $arrWysiwyg = array('description');
	protected $arrSettings = array('created_at' => true, 'author' => true, 'updated_at' => true);	

	public $validatesLengthOf = array(
			'product_name' => array('min' => 2, 'max' => 256, 'message' => 'Название - 2-256 символов'),
			'description' => array('min' => 2, 'max' => 1024, 'message' => 'Описание - 2-1024 символов'),
			'url' => array('min' => 1, 'max' => 64, 'message' => 'URL - от 1 до 64 символов', 'allowNull' => true),
	);
	
	public $validatesFormatOf = array(
			'url' => array('with' => '/^[\-_a-z0-9\.]+$/ui', 'message' => 'URL заполнен неверно', 'allowNull' => true),
			'our_price' => array('with' => '#^[0-9]{1,5}$#ui', 'message' => 'Наша цена заполнена неверно'),
			'client_price' => array('with' => '#^[0-9]{1,5}$#ui', 'message' => 'Цена клиента заполнена неверно')
	);
	
	public $validatesUniquenessOf = array(
			'url' => array('message' => 'Такой URL уже используется')
	);
	
	public function beforeValidation() {
		if(!empty($this->tableFields['ID_category'])) {
			$arrAvailableCategoriesIds = $this->getCategoriesAvailableForLink();
			if(!array_key_exists($this->getField('ID_category'), $arrAvailableCategoriesIds)) $this->errorValidated('', 'Недопустимая категория');
		}
	}
	
	public static function getProductUrl(array $arrProduct) {
		return W_ABSPATH . 'products/' . $arrProduct['ID_product'];
	}
	
	/**
	 * Метод получает категории, к которым можно привязывать товар
	 * Такие категории, которые не имеют дочерних категорий
	 */
	public function getCategoriesAvailableForLink() {
		$objDB = Service_Database::instanse();
		$stmt = 'SELECT `category`.*
				FROM `category`
				WHERE `category`.`ID_category` NOT IN
				(
					SELECT `category`.`ID_parent_category`
					FROM `category`
					WHERE `category`.`ID_parent_category` IS NOT NULL
				)';
		
		return Service_ArrayConverter::makeKeySimpleArrayFromMultyArray($objDB->select($stmt), 'ID_category', 'category_name');
	}
}